5 de junio de 2017

Estructura de la sesión

  • R
  • RStudio
  • Estructuración del trabajo en R
    • Uso de proyectos en Rstudio
    • packrat
    • Organización de proyectos en sistemas de directorios
    • Rutas relativas
  • Guía de estilo R
  • Herramientas para compartir y acceder a información
    • Dropbox
    • GoogleSheets
    • Figshare

R

Qué es R?

  • Es un lenguaje de programación y un entorno para computación estadística, análisis de datos y creación de gráficos.
  • Fue desarrollado inicialmente por Robert Gentleman y Ross Ihaka (Auckland, 1993) combinando las fortalezas de dos lenguajes existentes, S y Scheme.
  • El resultado se llamó R, en parte al reconocimiento de la influencia de S y en parte porque es la inicial del nombre de los autores (Hornik 2008)
  • Se distribuye de forma libre bajo la licencia GNU GPL.
  • Está disponible para los sistemas operativos Windows, Macintosh, Unix y GNU/Linux.

Qué es R?

     R se basa en scripts en lugar de menús.

Por qué R?

  • Diseñado para el análisis de datos
  • Productividad
  • Flexibilidad
  • Cualquier técnica estadística, se puede construir dentro de R… o ya está disponible en algún package de forma libre.
  • Forma parte de un proyecto colaborativo y abierto. El repositorio oficial de paquetes CRAN (The Comprehensive R Archive Network) tiene actualmente 10563 paquetes y 1380 en Bioconductor (Open source software for bioinformatics) 20170507.

Bibliografía: Grant (2016)

Por qué R?

  • Excelente ayuda y documentación.
  • Algunas revistas (Editorial Biostatistics) sólo contrastan reproducibilidad de procesos en R.


Por qué R?

Por qué R?

RStudio

Qué es RStudio ?

  • RStudio es la compañía fundada por JJ Allaire (Indiana, 1969) en el año 2009 con el objetivo de crear software de código abierto para el análisis de datos y la computación estadística.
  • RStudio es un entorno de desarrollo integrado (IDE) para R.
  • Parte comercial: RStudio Server Pro, Shiny Server Pro y shinyapps.io


     https://rviews.rstudio.com/2016/10/12/interview-with-j-j-allaire/

Por qué RStudio?

  • RStudio participa en la creación y desarrollo de paquetes importantes (ggplot2, dplyr, tidyr, lubridate, stringr,…) y herramientas como RMarkdown o Shiny.
  • RStudio está especialmente bien integrado con herramientas útiles para hacer investigación reproducible: (Gandrud 2015)
    • Un lenguaje estadístico para recoger y analizar datos (R)
    • Lenguajes para crear documentos, presentaciones, libros, artículos o webpages (LaTeX, Markdown, Shiny)
    • Herramientas que combinen el código fuente y la presentación de resultados mediante la creación de documentos dinámicos, gestión de archivos y control de versiones (Rpackages knitr y rmarkdown, Git)

Por qué RStudio?




  • Proporciona un entorno centralizado y bien organizado donde hacer casi todo lo que quieras con R.

    … y es gratis!

RStudio

RStudio

RStudio

RStudio


     Source: creación scripts de R con resaltado de sintaxis

RStudio


    Console. Environment

RStudio


    View. History. Files

RStudio


    Plot: ventana para gráficos

RStudio


    Plot Viewer: ventana para gráficos interactivos

RStudio


    Help: ayuda integrada de R (comando ?)

RStudio


    Help: ayuda integrada de R

RStudio


    Cheatsheets: hojas de trucos ;)

RStudio


    RStudio Cheatsheet

RStudio


    Packages

RStudio


    Tab: opciones, finalización de código

RStudio


    Tab: opciones, finalización de código

RStudio


    Tab: opciones, finalización de código

RStudio


    Atajos de teclado: cmd+Enter, shift+up,…

RStudio


    Folders

RStudio


    Folders

RStudio


    Folders

RStudio


    Folders

Estructuración del trabajo en R. Proyectos

Estructuración del trabajo

La investigación reproducible proporciona al investigador:

  • mejores hábitos de trabajo (proyectos, evitar duplicidades, organización, depuración, …)
  • mejor trabajo en equipo, más fácil y útil para tus colaboradores (guía de estilo, sintaxis, código claro, …)
  • modificaciones sencillas (documentos dinámicos)
  • mayor impacto en la investigación

(Gandrud 2015)

RStudio Projects

El uso de proyectos en RStudio tiene 5 ventajas fundamentales:

recuperación configurarción proyecto y última sesión
working directory
packrat y github
estructura de directorio
rutas relativas

RStudio NewProject

RStudio NewProject

RStudio NewProject

RStudio NewProject

RStudio NewProject

RStudio NewProject

RStudio NewProject

RStudio NewProject

RStudio NewProject

RStudio NewProject

RStudio NewProject

Estructuración del trabajo en R. Packrat.

Packrat

Packrat es un sistema de gestión de dependencias

Packrat trata de resolver problemas con paquetes, dependencias y versiones, haciendo los proyectos:

  • Aislados: crea en cada proyecto su propia librería de paquetes.
  • Portables: puedes llevarte el proyecto a otro ordenador incluso entre diferentes plataformas. Packrat facilita la instalación de paquetes de los que depende el proyecto.
  • Reproducibles: guarda las versiones exactas de los paquetes que utiliza el proyecto y asegura que esas versiones exactas serán las que se instalen a donde vayas.

Packrat

Cómo trabaja Packrat?

  • Crea una private package library en la carpeta del proyecto
  • Cuando abres una sesión de un proyecto con packrat, R mira sólo a esa carpeta. Cada vez que instales o borres un paquete, packrat hace esos cambios en la private library (aislamiento).
  • Desafortunadamente, las private libraries (como todas) no viajan bien porque sus contenidos son compilados según la arquitectura de la máquina, sistema operativo y la versión de R. Así que packrat hace snapshots del estado de la librería y de cualquier cambio, y se asegura de tener toda la información necesaria para poder restaurar esa biblioteca en otra máquina (portabilidad y reproducibilidad).
  • Packrat también te informa de paquetes que tienes que cargados y que no son necesarios para correr tu código. Así mantiene limpia tu bliblioteca.

Packrat

Packrat

Packrat

Packrat

Packrat

Packrat

Estructuración del trabajo en R. Organización.

Organización.

El manejo cuidadoso de archivos es crucial para la investigación reproducible.

Hay que tener un plan para organizar, almacenar y compartir los archivos.

Gandrud (2015)


La falta de organización en el espacio de trabajo es una fuente potencial de errores. Por tanto, un factor a evitar en nuesto trabajo.

… la organización lleva su tiempo.

Organización.

Organización.

Organización.

Principios básicos:

  • Sé consistente (estructura de directorio, nombres)
  • Coloca todo en un único directorio
  • Separa código de los datos
  • Separa datos brutos de los datos procesados
  • Resultados
  • Figuras
  • Informes

Organización.

  • Debemos ser capaces de organizarlo todo (K Broman 2016)
    • Nuestras cosas

Organización.

  • Debemos ser capaces de organizarlo todo (K Broman 2016)
    • Nuestros proyectos

Organización.

  • Debemos ser capaces de organizarlo todo (K Broman 2016)
    • Nuestros artículos

Organización.


xkcd.com/1179

Organización.


xkcd.com/1179

Organización.

  • Código de este tipo puede crear la estructura de directorios adecuada para ejecutar la aplicación.
if(!dir.exists("datos")){
dir.create("datos")
}
  • … con estructura jerárquica:
dir.create("datos/brutos")
dir.create("datos/procesados")

Organización.

Organización.

Organización.

Organización.

Organización.

Estructuración del trabajo en R. Rutas relativas.

Rutas relativas

Existen dos estilos de rutas, Mac/Linux y Windows, cuyas diferencias básicamente en:

  • Mac y Linux utilizan slashes (p.e. datos/datos_brutos) y Windows utiliza backslashes (p.e. datos\datos_brutos).

R puede trabajar con los dos pero, desafortunadamente, backslash tiene un significado especial para R y hay que duplicarlos (p.e. datos\\datos_brutos).

Recomendación: siempre slashes.

Grolemund and Wickham (2016)

Rutas relativas

  • Las rutas absolutas (rutas que aputan al mismo lugar independientemente del directorio de trabajo) se ven diferentes. En Windows empiezan con la letra del disco (p.e. C:) y en Mac/Linux empiezan con una slash (p.e. /Users/JordiPerez).

Recomendación: Nunca deberíamos utilizar rutas absolutas porque dificulta el intercambio de proyectos.

  • La última diferencia menor es al lugar que señala ~. En Mac/Linux apunta a tu home directory. En Windows, apunta a Mis Documentos.

Grolemund and Wickham (2016)

Rutas relativas.

Si se distribuye código con directorios referenciados de forma relativa funcionará siempre.

.. sube un nivel
. directorio actual
~ directorio home
read.table("../datos/brutos/datos_perinatal_2015.txt", sep=";", header=T)
setwd("./informes/rmarkdown")
setwd("~/Dropbox")

Jaffe and Leek (2016)

Rutas relativas.

Funciones útiles:

getwd()
# [1] "/home/carlos/Documentos/GitHub/curso_inv_rep/sesion_02_rstudio"
path.expand("~")
# [1] "/home/carlos"
file.path("~", "Dropbox")
# [1] "~/Dropbox"

Rutas relativas.

Funciones útiles:

path.expand( file.path( "~", "Dropbox"))
# [1] "/home/carlos/Dropbox"

En el servidor Linux, el resultado es:

# [1] "/home/jordi/Dropbox"

Y en Windows:

# [1] "C:/Users/Jordi/Documentos/Dropbox"

Guía de estilo de R

Guía de estilo.

Un buen estilo de escribir código es como utilizar correctamente los signos de puntuación. Puedes escribir sin ellos pero facilita la compresión.

Wickham (2014)

Cuando se colabora en un proyecto, un código tiene muchos autores y lectores. En estos casos es muy útil tener un estilo claro y bien definido, y a ser posible, común.

Guía de estilo. Código claro.


geekandpoke.typepad.com

Guía de estilo. Código claro.

Principios básicos:

  • Código que funcione (sin errores, la eficiencia es secundario)
  • Inteligible (código simple y claro)
  • Reutilizable (modular)
  • Reproducible (re-runnable)
  • No tengas prisa. Piensa antes de escribir (se minimizan errores y re-escrituras)
  • Aprende de otros (R, R packages)

(Karl Broman 2016; Wilson et al. 2014)

Guía de estilo. Código claro.

Funciones

  • Crea funciones y llámalas repetidamente
  • Es más sencillo de mantener (!)
  • Mira en librerías y paquetes (!)
  • Rompe el código en pequeñas funciones
  • Parte una gran función en pequeñas funciones
  • Si escribes el mismo código más de una vez, haz una función
  • Si una línea o bloque de código es complicado, haz una función
  • Puedes crearte tu propio R package! Con tus funciones!

Guía de estilo. Código claro.

Comentarios

  • Incluye un breve comentario al principio del script
  • Comenta los puntos críticos/difíciles y las secciones
  • No contradigas el código (!)
  • Comenta el código cuando lo escribas (o antes)
  • Planea gastar 1/4 del tiempo comentando

Guía de estilo.


Propuesta extraída de Advanced R de Hadley Wickham.


Disponible en Amazon (por 78.5€) o libre en su web (Wickham 2014)

La propuesta está basada en la Guía de estilo de R elaborada por usuarios de Google (Google 2014)

Chief Scientist at RStudio, and an Adjunct Professor of Statistics at the University of Auckland, Stanford University, and Rice University.

Guía de estilo. Nombres.

Nombres de archivos

  • Utiliza nombres útiles
  • Define nombres descriptivos pero concisos NO ES FÁCIL!
  • Evita los acentos.
  • Evita nombres del estilo:

    temp1
    temp2
    fv
    nms

Guía de estilo. Nombres.

Nombres de archivos

  • Sustituye espacios por guiones.

    funciones-proyecto.R
    modelos-ajustados.R

    cosas.r
    informe.r

  • Si hay que ejecutar los archivos secuencialmente, ordénalos.

    0-datos.R.
    1-descriptivo.R
    2-analisis.R

Guía de estilo. Nombres.

Nombres de objetos

  • Utiliza nombres útiles
  • Define nombres descriptivos pero concisos NO ES FÁCIL!
  • Funciones con verbos, objetos con nombres
  • En minúsculas y separados por guión bajo _

    periodo_1
    periodo_uno

    primer_periodo_del_ensayo
    PeriodoUno
    periodouno
    ppde

Guía de estilo. Nombres.

Nombres de objetos

  • Evita la confusión.
  • No utilices nombres de variables o funciones
    T <- FALSE
    c <- 10
    mean <- function(x) sum(x) 
  • No utilices a la vez: total y totals, Mat y mat, g y gg

Guía de estilo. Sintaxis.

Espaciado

Dejar siempre un espacio alrededor de todos los operadores ( = + - <- …) y después de una coma (y nunca, antes).

# Bien
media <- mean(feet / 12 + inches, na.rm = TRUE)

# Mal
media<-mean(feet/12+inches,na.rm=TRUE)

Con una excepción, no dejar espacios alrededor de : y ::

# Bien
x <- 1:10
maptools::kmlPolygon()

# Mal
x <- 1 : 10
maptools :: kmlPolygon()

Guía de estilo. Sintaxis.

Espaciado

Dejar un espacio a la izquierda de los paréntesis excepto en llamadas de funciones

# Bien
if (debug) do(x)
plot(x, y)

# Mal
if(debug)do(x)
plot (x, y)

Espacios extra si ayuda a alinear signos = o asignaciones <-

list(
  total = a + b + c, 
  mean  = (a + b + c) / n
)

Guía de estilo. Sintaxis.

Espaciado

No dejar espacios alrededor de código entre paréntesis o corchetes (a menos que haya una coma)

# Bien
if (debug) do(x)
diamonds[5, ]

# Mal
if ( debug ) do(x)  # No necesita espacios alrededor de debug
x[1,]   # Necesita un espacio después de la coma
x[1 ,]  # El espacio va después de la coma, no antes.

Guía de estilo. Sintaxis.

Llaves

Una llave nunca se abre en su propia línea y debe ir siempre seguida de una nueva línea. Una llave se cierra siempre en una nueva línea, a menos que vaya seguida de un else. Siempre sangrar el código entre llaves.

# Bien
if (y == 0) {
  log(x)
} else {
  y ^ x
}

# Mal
if (y == 0) {
  log(x)
} 
else {
  y ^ x
}

Guía de estilo. Sintaxis.

Logitud de las líneas

Limitar el código a 80 caracteres por línea. Esta anchura se adapta cómodamente a una página impresa con una fuente de tamaño razonable.

Guía de estilo. Sintaxis.

Sangría

La sangría se limita a dos espacios. Nunca utilizar tabuladores.

La única excepción es en la definición de una función cuando ocupa varias líneas. En ese caso debe añadirse espacios la segunda línea hasta donde empieza la definición de argumentos:

funcion_con_nombre_largo <- function(a = "un primer argumento largo", 
                                     b = "otro argumento largo",
                                     c = "y otro más")   
  # el código en general sangrado 2 espacios.
}

Guía de estilo. Sintaxis.

Herramientas para compartir y acceder a información

Compartir y acceder a información.

read.table()

Lee un fichero en formato tabla y crea un data.frame a partir de él. Los casos corresponden a las filas y las variables a las columnas.

read.table( file, # filename
header = FALSE, # are there column names?
sep = "", # what separates columns?
as.is = !stringsAsFactors, # do you want character strings as factors or characters?
quote = "\"'", dec = ".", row.names, col.names,
na.strings = "NA", nrows = ‐1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#",
stringsAsFactors = default.stringsAsFactors())
  • Por ejemplo:
read.table("file.txt", header = TRUE, sep="\t", as.is=TRUE)`

Notemos que el filename puede ser una ruta a un fichero en una web (e.g. 'www.algunaurl.com/tabla1.txt') (Jaffe 2016)

Compartir y acceder a información

readr

Read Rectangular Text Data

xlsx, readxl

Read/write xls/xlsx. Import excel files into R

foreign

Read Data Stored by Minitab, S, SAS, SPSS, Stata, Systat, Weka, dBase, …

Compartir y acceder a información

haven

Import and Export 'SPSS', 'Stata' and 'SAS' Files

RODBC

ODBC Database Access

pxR

PC-Axis with R. Provides a set of functions for reading and writing PCAxis files, used by different statistical organizations around the globe for data dissemination.

Compartir y acceder a información

download.file

Descargas de datos de la web. Ejemplo: Banco de España. Series temporales cuadros de Cuentas Financieras:

fileUrl <- "http://www.bde.es/webbde/es/estadis/ccff/csvs/cf.zip"
download.file(fileUrl,
destfile="./data/cf.zip")
list.files("./data")
dateDownloaded <- date()
dateDownloaded

Dropbox

El package rdrop2 de Karthik Ram reemplaza a rDrop.



En primer lugar, debes autenticarte:

tras permitir:

Dropbox

Tras identificarse, las funciones deseables:

  • Listar archivos y directorios.

Dropbox

  • Crear una carpeta en Dropbox: drop_create('drop_test')

  • Subir un fichero a Dropbox: drop_upload('mtcars.csv')

  • Descargar un fichero a Dropbox: drop_get('mtcars.csv')

  • Borrar un fichero de Dropbox: drop_delete('mtcars.csv')

  • Mover un fichero en Dropbox: drop_move("mtcars.csv", "new_folder/mtcars.csv")

  • Copiar un fichero en Dropbox: drop_copy("new_folder/mtcars.csv", "new_folder2/mtcars.csv")

  • Buscar un fichero en Dropbox: drop_search('gif')

googlesheets

googlesheets


El package googlesheets de Jennifer Bryan y Joanna Zhao permite importar y exportar hojas de cálculo desde una app de Shiny o desde nuestro pc, crearlas o eliminarlas (completa o parcialmente).

googlesheets.

Por qué utilizar googlesheets? (Bryan 2015)

  • Colaboración: no adjuntes, pasa un link!
  • Aligerar el almacenamiento de datos en Shiny
  • Trabajar con GoogleSheets públicas o privadas desde R
  • GoogleSheets tiene funciones incorporadas para importar datos web: importxml(), importhtml(), importfeed()
  • Servicios web: ifttt.com

github


figshare




figshare es un repositorio abierto donde los usuarios pueden hacer que todos sus resultados de investigación estén disponibles de una manera citable, compartible y comprobable.

figshare


Se pueden almacenar archivos de todo tipo.

figshare

figshare

figshare

figshare

figshare

figshare


figshare

  • En la primera práctica descargaremos esos datos:
fileUrl <- "https://ndownloader.figshare.com/files/8455721"
download.file(fileUrl, destfile="./data/datos_practicas.RData")
dateDownloaded <- date()


Los usuarios de Windows debéis añadir a download.file la opción mode="wb"

Resumen

Referencias bibliográficas

Referencias

Broman, K. 2016. Tools for reproducible research. Organizing projects; exploratory data analysis. http://kbroman.org/Tools4RR/.

Broman, Karl. 2016. Tools for reproducible research. Writing clear code. http://kbroman.org/Tools4RR/.

Bryan, Jennifer. 2015. Fun times with R and Google Sheets. UseR! 2015. https://speakerdeck.com/jennybc/googlesheets-talk-at-user2015.

Gandrud, Christopher. 2015. Reproducible Research with R and Rstudio, 2nd Edition. Chapman; Hall/CRC.

Google, R user community at. 2014. Google’s R Style Guide. https://google.github.io/styleguide/Rguide.xml.

Grolemund, Garrett, and Hadley Wickham. 2016. R for Data Science. O’Reilly. http://r4ds.had.co.nz/.

Hornik, Kurt. 2008. The R Faq: Why Is R Named R? https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-is-R-named-R_003f.

Jaffe, Andrew. 2016. SISBID: Module 1 Big Data Wrangling in R. Data I/O + Structure. http://sisbid.github.io/Module1/.

Jaffe, Andrew, and Jeff Leek. 2016. SISBID: Module 1 Big Data Wrangling in R. Reproducible Research And Version Control. http://sisbid.github.io/Module1/.

Wickham, Hadley. 2014. Advanced R. Chapman & Hall/CRC. http://adv-r.had.co.nz/.

Wilson, G., DA. Aruliah, CT. Brown, NP Chue Hong, M. Davis, and RT et al. Guy. 2014. “Best Practices for Scientific Computing.” PLoS Biol 1 (12): e1001745. doi:10.1371/journal.pbio.1001745.